# 1.有一对兔子从出生后3个月开始一个月生一对小兔子，小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死。
# 问每个月的兔子总数是多少？

# 方案一：面向对象解决

# 1.有个兔笼放兔子
rabbits=[]

# 2.兔子类
# class Rabbit(object):
#     def __init__(self):
#         self.age=1  # 默认的是1个月份

#     def born(self):
#         """出生方法"""
#         if self.age>=3:  # 如果我的月份大于等于3，就需要向兔笼放一只新兔子（只有1个月属性的兔子）
#             rabbits.append(Rabbit())  # Rabbit() 就是实例化的一只兔子，默认就是1个月

#         self.age+=1 # 出生一次后月份加1

# # 3.月份出生类
# class MonthRabitts(object):
#     def __init__(self,month):
#         self.month=month
#         self.month_count=[]
#         self.month_born()

#     def month_born(self):
#         rabbits.append(Rabbit()) # 兔笼中无中生有  ，  Rabbit()就是兔子！
#         """每隔一个月，在兔笼中的所有兔子身上调用出生方法"""
#         for m in range(self.month):
#             for r in rabbits: # 在兔笼中取出每一只兔子
#                 r.born()

#             #记录这个月有几只兔子
#             self.month_count.append(len(rabbits)) #  对兔笼求长度，就是当前月有的兔子数

# if __name__ == '__main__':
#     m=MonthRabitts(10)
#     print(m.month_count)



# 第二种 ：通过数学方式推导出来的。  f(n)=1+1+.......+(f(n-2)+f(n-1))

rabbits = []
month = 10
for i in range(1, month + 1):
    if i < 3:
        rabbits.append(1)
    else:
        rabbits.append(rabbits[-2] + rabbits[-1])

print(rabbits)
